/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.controller;

import com.persistencia.domain.*;
import com.service.AsignaturaService;
import com.service.ClaseService;
import com.service.DocentexClaseService;
import com.service.impl.AsignaturaServiceImpl;
import com.service.impl.ClaseServiceImpl;
import com.service.impl.DocentexClaseServiceImpl;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

/**
 *
 * @author SHERLY
 */
@ManagedBean
@ViewScoped
public class DocenteXClaseController {
    
    private List<Docentexclase> listaDocenteXClase;
    private Docentexclase docenteXClase;
    private Docentexclase docenteXClaseSeleccionado;    
    private AsignaturaService asignaturaService;
    private DocentexClaseService docenteXClaseService; 
    private Ciclo ciclo;
    private ClaseService claseService;
    private String tipoCreacion;
    private String NAsgId;
    private String NCicId;
    private String NCicAcdId;
    private String NTipoDictado;
    private int NCantidad;
    private boolean visible; 
    private boolean enabled; 
        
    public DocenteXClaseController() {
        try {
            listaDocenteXClase = new ArrayList<Docentexclase>();
            ciclo = new Ciclo();
            ciclo.setNCicId(1);
            docenteXClaseService = new DocentexClaseServiceImpl(); 
            listaDocenteXClase = docenteXClaseService.obtenerListaDocenteXClasePorCiclo(ciclo);
            docenteXClase = new Docentexclase();
            docenteXClaseSeleccionado = new Docentexclase();
            asignaturaService = new AsignaturaServiceImpl();                   
            claseService = new ClaseServiceImpl();
            NAsgId = "0";
            System.out.println("NAsgId:"+NAsgId);
            tipoCreacion = "1";
            NTipoDictado = "0";
            visible = false;
        } catch (Exception ex) {
            Logger.getLogger(DocenteXClaseController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void grabarDocenteXClase(){
        FacesMessage msg = null;
        try{
            System.out.println("Entramos a grabar claseXDocente");
            System.out.println("tipoCreacion="+tipoCreacion);
            if( tipoCreacion.equals("1") ){
                //Por Ciclo
                System.out.println("NCicAcdId="+NCicAcdId);
                List<Asignatura> listaAsignatura = asignaturaService.obtenerListaAsignaturaPorCicloAcademico(
                                                    new Cicloacademico(Integer.parseInt(NCicAcdId)));
                for (Asignatura asignatura : listaAsignatura) {
                    grabarDocenteXClasePorAsignatura(asignatura);
                }
            }else if( tipoCreacion.equals("2") ){
                      //Por Asignatura
                      Asignatura asignatura = asignaturaService.obtenerAsignaturaPorId(Integer.parseInt(NAsgId));
                      grabarDocenteXClasePorAsignatura(asignatura);                      
                  }
            
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"Inserción","Los DocenteXClase se crearon satisfactoriamente.");
            //grupo = new Grupo();
            //grupoService.registrarGrupo(grupo);
            //listarGrupo();
        } catch (Exception ex) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,"Inserción","No se registro el DocenteXClase.");
        }
        finally{            
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }
    
    private void grabarDocenteXClasePorAsignatura(Asignatura asignatura){
        try {            
            System.out.println("asignatura="+asignatura);
            System.out.println("size="+asignatura.getClaseList().size());
            for (Clase clase : asignatura.getClaseList()) {
                if( clase.getNMdlDctId().getNMdlDctId() == Integer.parseInt(NTipoDictado) || NTipoDictado.equals("0") ){
                    System.out.println("NClsId="+clase.getNClsId());
                    System.out.println("NMdlDctId().getVNombre()="+clase.getNMdlDctId().getVNombre());
                    System.out.println("getNMdlDctId ="+clase.getNMdlDctId().getNMdlDctId());
                    System.out.println("si entro,NTipoDictado="+NTipoDictado);
                    System.out.println("NCantidad="+NCantidad);
                    for (int i = 0; i < NCantidad; i++) {
                        Docentexclase docentexclase = new Docentexclase();
                        docentexclase.setNCicId(new Ciclo(Integer.parseInt(NCicId)));
                        docentexclase.setNClsId(new Clase(clase.getNClsId()));
                        docentexclase.setVEstado("1");
                        docenteXClaseService.registrarDocentexclase(docentexclase);
                    }                    
                }
            }
        } catch (Exception ex) {
            java.util.logging.Logger.getLogger(DocenteXClaseController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public SelectItem[] itemsMDPorClaseSelectOne(){
        try {
            System.out.println("getItemsAsignaturaSelectOne");
            System.out.println("NAsgId="+NAsgId);
            if( NAsgId.equals("0") ){
                setEnabled(true);
                System.out.println("es = 0,setEnabled"+isEnabled());            
                return null;
            }else{
                setEnabled(false);
                System.out.println("es != 0,setEnabled"+isEnabled());
                //return getSelectItems(asignaturaService.obtenerListaAsignaturas());
                return getSelectItems(claseService.obtenerListaClasesPorAsignatura(
                                        new Asignatura(Integer.parseInt(NAsgId))));
            }
        } catch (Exception ex) {
            Logger.getLogger(AsignaturaController.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }         
    }
    
    private SelectItem[] getSelectItems(List<Clase> listaClase) {
        SelectItem[] items = new SelectItem[listaClase.size()];
        int i = 0;
        for (Clase objClase : listaClase) {
            items[i++] = new SelectItem(objClase.getNMdlDctId().getNMdlDctId(), objClase.getNMdlDctId().getVNombre());
        }
        return items;
    }    
    
    public void updateControl(){
        visible = !visible;
        System.out.println("visible="+visible);
    }
    
    public void updateValor(){
        setNAsgId("0");
    }

    public Docentexclase getDocenteXClase() {
        return docenteXClase;
    }

    public void setDocenteXClase(Docentexclase docenteXClase) {
        this.docenteXClase = docenteXClase;
    }

    public Docentexclase getDocenteXClaseSeleccionado() {
        return docenteXClaseSeleccionado;
    }

    public void setDocenteXClaseSeleccionado(Docentexclase docenteXClaseSeleccionado) {
        this.docenteXClaseSeleccionado = docenteXClaseSeleccionado;
    }

    public List<Docentexclase> getListaDocenteXClase() {
        return listaDocenteXClase;
    }

    public void setListaDocenteXClase(List<Docentexclase> listaDocenteXClase) {
        this.listaDocenteXClase = listaDocenteXClase;
    }
    
    public String getNAsgId() {
        return NAsgId;
    }

    public void setNAsgId(String NAsgId) {
        this.NAsgId = NAsgId;
    }

    public int getNCantidad() {
        return NCantidad;
    }

    public void setNCantidad(int NCantidad) {
        this.NCantidad = NCantidad;
    }

    public String getNCicAcdId() {
        return NCicAcdId;
    }

    public void setNCicAcdId(String NCicAcdId) {
        this.NCicAcdId = NCicAcdId;
    }

    public String getNCicId() {
        return NCicId;
    }

    public void setNCicId(String NCicId) {
        this.NCicId = NCicId;
    }

    public String getNTipoDictado() {
        return NTipoDictado;
    }

    public void setNTipoDictado(String NTipoDictado) {
        this.NTipoDictado = NTipoDictado;
    }

    public AsignaturaService getAsignaturaService() {
        return asignaturaService;
    }

    public void setAsignaturaService(AsignaturaService asignaturaService) {
        this.asignaturaService = asignaturaService;
    }

    public DocentexClaseService getDocenteXClaseService() {
        return docenteXClaseService;
    }

    public void setDocenteXClaseService(DocentexClaseService docenteXClaseService) {
        this.docenteXClaseService = docenteXClaseService;
    }

    public String getTipoCreacion() {
        return tipoCreacion;
    }

    public void setTipoCreacion(String tipoCreacion) {
        this.tipoCreacion = tipoCreacion;
    }

    public boolean isVisible() {
        return visible;
    }

    public void setVisible(boolean visible) {
        this.visible = visible;
    }

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }
        
}